package com.stu.day13;

import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedList;

/**
 * @author zy
 * @date 2025/2/11 19:15
 */
public class LinkedListDemo {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(10);  // add把数据放到尾部
        list.add(30);
        list.add(20);
        list.add(40);

        //TODO 集合可以转成数组
        Object[] arr = list.toArray();
        System.out.println("集合转数组:"+Arrays.toString(arr));  // [10, 30, 20, 40]
        System.out.println("集合"+list);  // [10, 30, 20, 40]

        //TODO 下标越界异常
        //java.lang.IndexOutOfBoundsException索引下标越界异常
        System.out.println("第二个元素"+list.get(1));  // 30

        //java.lang.StringIndexOutOfBoundsException字符串下标越界异常
        //System.out.println("aa".charAt(10));

        //java.lang.ArrayIndexOutOfBoundsException数组下标越界异常
        // System.out.println(Arrays.asList(1,2,43).toArray()[100]);

        System.out.println(list.contains(30));  // 查看集合是否包含30,源码return indexOf(o) >= 0;
        System.out.println(list.indexOf(30));  // 返回首次出现索引
        System.out.println("====");

        //addFirst将数据放入到容器的头部
        list.addFirst(100);
        //addLast相当于add

        /*
          add(int index, E element)在指定位置 index 插入指定的元素 element。
          addAll(Collection<? extends E> c)将指定集合的所有元素添加到列表的尾部。
          addAll(int index, Collection<? extends E> c)将指定集合的所有元素插入到指定位置 index。
         */

//        E remove()移除并返回列表的第一个元素（抛出 NoSuchElementException 如果列表为空）。
//        E removeFirst()移除并返回列表的第一个元素。
//        E removeLast()移除并返回列表的最后一个元素。
//        boolean remove(Object o)移除列表中首次出现的指定元素（如果存在）。
//        E removeAt(int index)移除并返回指定位置 index 的元素。

        //压入栈顶
        list.push(500);
        list.push(600);
        System.out.println("压入栈顶后集合"+list);
        System.out.println("删除并返回栈顶内容:"+list.pop());
        System.out.println("集合"+list);

        list.offerFirst(700);  // 相当于addFirst
        list.offerLast(900);  // 相当于add,addLast
        //pollFirst也是删除栈顶的数据
        System.out.println("删除并返回栈顶内容:"+list.pollFirst());
        System.out.println("删除并返回栈底数据:"+list.pollLast());

        System.out.println("删除并返回最后一个元素:"+list.removeLast());
        System.out.println("删除并返回第一个元素:"+list.removeFirst());
        System.out.println("删除并返回第一个元素:"+list.remove());

        System.out.println("获取第一个元素:"+list.getFirst());
        System.out.println("获取最后一个元素:"+list.getLast());

        //普通for,增强for
        Iterator<Integer> iter = list.iterator();
        while(iter.hasNext()){
            System.out.println(iter.next());
        }

        System.out.println("===jdk8.0-foreach语法===");
        list.forEach(e-> System.out.println(e));
        System.out.println("=====");
        list.forEach(System.out::println);

    }
}
